const path = require("path");
const fs = require("fs");
module.exports = class commonTable {
  static desc = "简单表格 commonTable";

  constructor({ targetFilePath, componentName }) {
    this.componentName = "main";
    this.targetFilePath = targetFilePath;
    this.componentName = componentName || this.componentName;
  }
  modifyTargetFile() {
    // 读取文件内容
    const content = fs.readFileSync(this.targetFilePath, { encoding: "utf-8" });
    //  执行修改项
    const { getModifyTemplate } = require("./config");
    const modifyTemplate = getModifyTemplate(this.componentName);

    // 正则替换content中对应内容
    let replaceStr = content;
    for (let index = 0; index < modifyTemplate.length; index++) {
      const item = modifyTemplate[index];
      console.log("开始执行任务", index, item.repeatReg);
      // 判定是否重复执行
      if (item.repeatReg && item.repeatReg.test(replaceStr)) {
        console.log(`已匹配到正则${item.repeatReg}，请勿重复执行`);
        continue;
      }
      // 判定option选项是否存在  有则插入 无则新建
      if (item.checkOptionReg) {
        // 有选项
        if (item.checkOptionReg.test(replaceStr)) {
          console.log("已有选项，插入值");
          replaceStr = replaceStr.replace(item.targetReg, item.tagetReplace);
        } else {
          console.log("无选项，新增选项并插入值");
          replaceStr = replaceStr.replace(
            item.addOptionReg,
            item.addOptionReplace
          );
        }
        continue;
      }
      console.log("无需判定option，直接写入");
      // 无需判定option，直接写入
      replaceStr = replaceStr.replace(item.targetReg, item.tagetReplace);
    }
    // 写入修改后的内容
    fs.writeFileSync(this.targetFilePath, replaceStr, { encoding: "utf-8" });
  }

  task() {
    this.modifyTargetFile();
  }
};
